home *** CD-ROM | disk | FTP | other *** search
- /*
- File: ShowOTEnetAddr.c
-
- Contains: Simple app to print out Ethernet addresses for any Ethernet card on
- any Mac which has Open Transport installed.
- This includes the PCI based Macs.
-
-
- Copyright: © 1993-1995 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
- 2/6/96 rkubota (1) initialized the index variable to 0 in main
-
- To Do:
- */
-
-
- #include <stdio.h>
- #include <Types.h>
- #include <Memory.h>
- #include <Resources.h>
- #include <Events.h>
-
- #include <OpenTransport.h> // open transport files
- #include <OpenTptLinks.h>
-
- struct Address8022
- {
- OTAddressType fAddrFamily;
- UInt8 fHWAddr[k48BitAddrLength];
- UInt16 fSAP;
- UInt8 fSNAP[k8022SNAPLength];
- };
- typedef struct Address8022 Address8022;
-
- #define kTrue 1
- #define kFalse 0
-
- //-----------------------------------------------------------------------------------------
- // Globals
- //-----------------------------------------------------------------------------------------
-
- EndpointRef gEndpoint1;
-
- //-----------------------------------------------------------------------------------------
- // prototypes
- //-----------------------------------------------------------------------------------------
- OSStatus DoBind(void);
- OSStatus GetEthernetAddress(char *slotName);
-
- /*******************************************************************************
- ** DoBindENET
- For this sample, we need to bind to any ethernet endpoint. In this case
- we bind to enet protocol type 0x8888. We use an Address8022 variable
- type for expediency
- ********************************************************************************/
-
- OSStatus DoBind()
- {
- OSStatus osStatus;
- TBind gRequestInfo;
- Address8022 theAddr = {AF_8022, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0x8888,
- {0x00,0x00,0x00,0x00,0x00}};
-
- // finish bind information
- gRequestInfo.addr.buf = (UInt8 *)&theAddr;
- gRequestInfo.addr.len = 10; // family type + Ethernet + type field
- // don't use sizeof(theAddr) since we are binding to type 1 Ethernet
- // address, not to an 802.2 address.
- gRequestInfo.addr.maxlen = 0;
- gRequestInfo.qlen = 0;
-
- if (osStatus = OTBind(gEndpoint1, &gRequestInfo, NULL))
- {
- printf("\nCould not bind an endpoint, error = %d\n", osStatus);
- CloseOpenTransport();
- return -4;
- }
-
- return osStatus;
- }
-
- /*******************************************************************************
- ** GetEthernetAddress
- ********************************************************************************/
-
- OSStatus GetEthernetAddress(char *slotName)
- {
- OSStatus osStatus;
- TBind returnInfo;
- Address8022 theReturnAddr = {AF_8022, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0x0000,
- {0x00,0x00,0x00,0x00,0x00}};
-
- returnInfo.addr.buf = (UInt8 *)&theReturnAddr;
- returnInfo.addr.maxlen = 10; // family type + 6 bytes for Ethernet + type
- returnInfo.qlen = 0;
-
-
- osStatus = OTGetProtAddress(gEndpoint1,&returnInfo,NULL);
-
- if (osStatus == kOTNoError)
- {
- if (slotName[0] != 0x00)
- printf("\nAddress for PCI Slot %s => ", slotName);
- else
- printf("\nAddress for Ethernet Built-In => ");
-
- printf("%02x.",(int )theReturnAddr.fHWAddr[0]);
- printf("%02x.",(int )theReturnAddr.fHWAddr[1]);
- printf("%02x.",(int )theReturnAddr.fHWAddr[2]);
- printf("%02x.",(int )theReturnAddr.fHWAddr[3]);
- printf("%02x.",(int )theReturnAddr.fHWAddr[4]);
- printf("%02x",(int )theReturnAddr.fHWAddr[5]);
- }
- else
- printf("\n\nCould not get the Ethernet address, error = %d\n\n", osStatus);
-
- return osStatus;
- }
-
- /*******************************************************************************
- ** main
- ********************************************************************************/
-
- main()
- {
- OSStatus osStatus;
- OTPortRecord devicePortRecord;
- Boolean foundAPort;
- UInt32 index;
-
- printf("\n\nEthernet Address Display v1.1\n");
- printf("\nThis application displays the Ethernet address for the\n");
- printf("Ethernet Built-In port and PCI Ethernet cards.\n\n");
-
- if (osStatus = InitOpenTransport())
- {
- printf("\n\nOpen Transport is not installed!\n\n");
- return 0;
- }
-
- index = 0;
- // iterate thru each OT port record for ethernet ports.
- while (foundAPort = OTGetIndexedPort(&devicePortRecord,index))
- {
- if ((devicePortRecord.fCapabilities & kOTPortIsDLPI) &&
- (devicePortRecord.fCapabilities & kOTPortIsTPI) &&
- (kOTEthernetDevice == OTGetDeviceTypeFromPortRef(devicePortRecord.fRef)))
- {
-
- gEndpoint1 = OTOpenEndpoint(OTCreateConfiguration(devicePortRecord.fPortName), (OTOpenFlags)NULL, NULL,&osStatus);
-
- if (osStatus == kOTNoError)
- {
- // we have to bind the endpoint before we can get it's address info
- osStatus = DoBind();
- if (osStatus == kOTNoError)
- {
- GetEthernetAddress(devicePortRecord.fSlotID);
- OTUnbind(gEndpoint1);
- }
-
- OTCloseProvider(gEndpoint1);
- }
-
-
- }
- index++;
- }
-
-
-
- // closing down
- CloseOpenTransport();
-
- printf("\n\nTo quit the application press Command-Q.\n");
-
- return 0;
- }
-
-
-